package com.floreantpos.bo.actions;

import com.googlecode.floreo.ecf.bematech.BematechMP2100;
import java.awt.event.ActionEvent;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.AbstractAction;
import javax.swing.Icon;
import javax.swing.JOptionPane;


public class NotaFiscalPaulistaAction extends AbstractAction {

  public NotaFiscalPaulistaAction() {
    super("Arquivo Nota Fiscal Paulista");
  }

  public NotaFiscalPaulistaAction(String name) {
    super(name);
  }

  public NotaFiscalPaulistaAction(String name, Icon icon) {
    super(name, icon);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    
    String dataArquivo;
    dataArquivo = JOptionPane.showInputDialog("Data do Arquivo (dd/mm/aaaa): ");
    
    if (dataArquivo.isEmpty()) {
      JOptionPane.showMessageDialog(null, "A Data do Arquivo é obrigatória", com.floreantpos.POSConstants.MDS_POS, JOptionPane.ERROR_MESSAGE, null);
      return;      
    }
    
    SimpleDateFormat dataNomeArquivo = new SimpleDateFormat("yyyyMMdd", new Locale("pt", "BR"));
    String dataAsString;
    Date dataArquivoAsDate;
    
    try {
      SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy", new Locale("pt", "BR"));
      simpleDateFormat.setLenient(false);
      dataArquivoAsDate = simpleDateFormat.parse(dataArquivo);
      dataAsString = simpleDateFormat.format(dataArquivoAsDate);
    } catch (ParseException ex) {      
      JOptionPane.showMessageDialog(null, "Data Inválida", com.floreantpos.POSConstants.MDS_POS, JOptionPane.ERROR_MESSAGE, null);      
      Logger.getLogger(NotaFiscalPaulistaAction.class.getName()).log(Level.WARNING, null, ex);
      return;      
    }
    
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DATE, -1);
    if (dataArquivoAsDate.after(calendar.getTime())) {
      JOptionPane.showMessageDialog(null, "A Data do Arquivo deve ser menor que a Data Atual", com.floreantpos.POSConstants.MDS_POS, JOptionPane.ERROR_MESSAGE, null);      
    } else {
      dataArquivo = dataNomeArquivo.format(dataArquivoAsDate);
      String arquivo = "C:\\Floreo\\export\\NotaFiscalPaulista-" + dataArquivo + ".txt";
      String arqDestino = BematechMP2100.geraRegistrosCAT52MFDEx(arquivo, dataAsString);
      if (arqDestino != null && !arqDestino.isEmpty()) {
        JOptionPane.showMessageDialog(null, "Arquivo Gerado com sucesso.\n" + arquivo, com.floreantpos.POSConstants.MDS_POS, JOptionPane.INFORMATION_MESSAGE, null);
      } else {
        JOptionPane.showMessageDialog(null, "Falha na Geração do Arquivo", com.floreantpos.POSConstants.MDS_POS, JOptionPane.ERROR_MESSAGE, null);
      }
    }   
  }
}
